<?php
namespace Swiftx\Component\DataBase;

/**
 * 创建一个Manager对象
 * @package Swiftx\Interfaces\Orm
 */
class Table {

    /**
     * 连接对象
     * @var \PDO
     */
    protected $connect;

    /**
     * 表名称
     * @var string
     */
    protected $name;

    /**
     * 表字段
     * @var Column[]
     */
    protected $columns = [];

    /**
     * 表构造函数
     * @param $pdo
     */
    public function __construct($pdo){
        $this->connect = $pdo;
    }

    /**
     * 获取表名
     * @return string
     */
    public function getName():string {
        return $this->name;
    }

    /**
     * 设置表名
     * @param string $value
     */
    public function setName(string $value){
        $this->name = $value;
    }

    /**
     * 设置字段
     * @param Column $column
     */
    public function setColumn(Column $column){
        $this->columns[] = $column;
    }

    /**
     * 获取主键
     * @return string[]
     */
    public function getPrimary():array {
        $result = [];
        foreach($this->columns as $column){
            if($column->isPrimary())
                $result[] = $column->getName();
        }
        return $result;
    }

    /**
     * 删除数据表
     */
    public function drop(){
        $sql = /** @lang text */'DROP TABLE '.$this->name;
        $this->connect->exec($sql);
    }

    /**
     * 创建数据表
     */
    public function create(){
        $sql = /** @lang text */'CREATE TABLE ';
        $sql .= $this->name.' (';
        $primary = [];
        foreach($this->columns as $column){
            if($column->isPrimary())
                $primary[] = $column->getName();
            $sql .= $column->getSchema().',';
        }
        $sql .= 'PRIMARY KEY (';
        $sql .= implode(',',$primary);
        $sql .= '))';
        $this->connect->exec($sql);
    }

}